# -*- coding: utf-8 -*-
import pygame
import random
import sys
import math
import os
# 初始化pygame
pygame.init()
# 初始化音频系统
pygame.mixer.init()
# 窗口设置
width, height = 1000, 800
screen = pygame.display.set_mode((width, height))
# 改进的字体设置函数
def get_font(size):
    # 尝试加载系统中文字体
    font_paths = [
        "C:/Windows/Fonts/simhei.ttf",  # Windows 黑体
        "C:/Windows/Fonts/msyh.ttc",  # Windows 微软雅黑
        "C:/Windows/Fonts/simsun.ttc", # Windows 宋体
        "/System/Library/Fonts/PingFang.ttc",  # macOS
        "/System/Library/Fonts/Arial.ttf",  # macOS
        "/usr/share/fonts/truetype/droid/DroidSansFallbackFull.ttf",  # Linux
        "/usr/share/fonts/truetype/wqy/wqy-microhei.ttc",  # Linux
    ]
    for font_path in font_paths:
        if os.path.exists(font_path):
            try:
                return pygame.font.Font(font_path, size)
            except:
                continue
    # 如果找不到中文字体，使用默认字体
    try:
        return pygame.font.SysFont("Arial", size)
    except:
        return pygame.font.Font(None, size)
# 创建字体对象
font = get_font(20)  # 稍微减小字体大小
title_font = get_font(36)
# 多国语言和中国方言的"我爱你"表达
love_texts = [
# 国际语言
"Te amo",  # 西班牙语
"Je t'aime",  # 法语
"Ich liebe dich",  # 德语
"Ti amo",  # 意大利语
"Я тебя люблю",  # 俄语
"I love you",  # 英语
"Te quiero",  # 西班牙语(另一种说法)
"Ik hou van je",  # 荷兰语
"Eu te amo",  # 葡萄牙语
"Amo-te",  # 葡萄牙语(欧洲)
"Jeg elsker dig",  # 丹麦语
"Jeg elsker deg",  # 挪威语
"Jag älskar dig",  # 瑞典语
"Minä rakastan sinua",  # 芬兰语
"Kocham Cię",  # 波兰语
"Ja cię kocham",  # 波兰语(口语)
"Szeretlek",  # 匈牙利语
"Te iubesc",  # 罗马尼亚语
"Miluji tě",  # 捷克语
"Mám tě rád(a)",  # 捷克语(口语)
"Ljubim te",  # 斯洛文尼亚语
"Volim te",  # 克罗地亚语/塞尔维亚语/波斯尼亚语
"Я тебе кохаю",  # 乌克兰语
"Saya cintakan kamu",  # 马来语
"Saya cintamu",  # 马来语(简写)
"Aku cinta kamu",  # 印尼语
"ฉันรักเธอ",  # 泰语
"ຂ້າພະເຈົ້າຮັກເຈົ້າ",  # 老挝语
"Mahal kita",  # 塔加洛语(菲律宾)
"我爱你",  # 中文(普通话)
"我愛你",  # 中文(繁体)
"あいしてる",  # 日语
"사랑해",  # 韩语(敬语)
"사랑해요",  # 韩语(标准)
"Tình yêu em",  # 越南语
"Mi aam tuigim leat",  # 爱尔兰语
"Tá grá agam duit",  # 盖尔语(爱尔兰)
"Gora tú",  # 盖尔语(苏格兰)
"Inħobbok",  # 马耳他语
"Ana ahebak/ahebek",  # 阿拉伯语(男对女/女对男)
"أنا أحبك",  # 阿拉伯语(标准写法)
"אני אוהב אותך",  # 希伯来语(男对女)
"אני אוהבת אותך",  # 希伯来语(女对男)
"Main tumse pyar karta/karti hoon",  # 印地语(男对女/女对男)
"我喜欢你",  # 中文(含蓄说法)

# 中国方言
"我爱你",  # 粤语(广州)
"我中意你",  # 粤语(香港)
"我鍾意你",  # 粤语(繁体)
"我爱侬",  # 吴语(上海)
"我欢喜你",  # 吴语(苏州)
"我喜欢你",  # 吴语(杭州)
"我愛你",  # 闽南语(台湾)
"阮愛你",  # 闽南语(泉州)
"我誠心愛你",  # 闽南语(厦门)
"我钟意你",  # 赣语(南昌)
"我欢你",  # 湘语(长沙)
"我喜欢你",  # 湘语(湘潭)
"额爱你",  # 陕西方言(西安)
"俄爱你",  # 陕西方言(陕北)
"饿爱你",  # 中原官话(河南)
"俺爱你",  # 中原官话(山东)
"我稀罕你",  # 东北官话(沈阳)
"我耐你",  # 天津方言
"我钟意你",  # 客家话(梅州)
"涯爱你",  # 客家话(惠州)
"我爱你",  # 客家话(赣州)
"我爱你个",  # 徽语(徽州)
"我喜欢你",  # 晋语(太原)
"我待见你",  # 晋语(大同)
"我疼你",  # 江淮官话(南京)
"我欢喜你",  # 江淮官话(扬州)
"我钟意你",  # 西南官话(成都)
"我喜欢你",  # 西南官话(重庆)
"我好喜欢你",  # 西南官话(昆明)
"我中意你",  # 西南官话(贵阳)
"勾买蒙",  # 壮语(广西)
"我爱你",  # 藏语
"ᠪᠠᠢ ᠨᠢᠮᠠᠷ᠎ᠠ",  # 蒙古语
"wǒ ài nǐ",  # 汉语拼音
"我爱你",  # 普通话(标准)

# 其他有趣表达
"Te sakam",  # 阿尔巴尼亚语
"Te dua",  # 阿尔巴尼亚语(另一种)
"Seni seviyorum",  # 土耳其语
"Ma armastan sind",  # 爱沙尼亚语
"Es tevi mīlu",  # 拉脱维亚语
"Aš tave myliu",  # 立陶宛语
"Mwen renmen ou",  # 海地克里奥尔语
"Mi amas vin",  # 世界语
"Je t'adore",  # 法语(我爱慕你)
"Eu amo você",  # 葡萄牙语(巴西)
"Ani ohev otach",  # 希伯来语(拉丁拼写)
"Ich hab dich lieb",  # 德语(口语)
"Ti voglio bene",  # 意大利语(我爱你/我喜欢你)
]
# 爱心坐标生成
love_points = []
for t in range(1000):
    theta = t / 1000 * 2 * math.pi
    x = 15 * (pow(math.sin(theta), 3))
    y = 10 * math.cos(theta) - 5 * math.cos(2 * theta) - 2 * math.cos(3 * theta) - math.cos(4 * theta)
    # 缩放并偏移到窗口中心
    x = x * 18 + width // 2
    y = -y * 18 + height // 2
    love_points.append((int(x), int(y)))
# 文字对象列表
text_objects = []
colors = [
(255, 182, 193),  # 浅粉红
(255, 105, 180),  # 热粉红
(255, 20, 147),  # 深粉红
]
# 测试字体渲染
print("测试字体渲染...")
for text in love_texts:
    try:
        test_surface = font.render(text, True, (255, 255, 255))
        print(f"成功渲染: {text}")
    except Exception as e:
        print(f"渲染失败: {text} - 错误: {e}")
for i, text in enumerate(love_texts):
    # 为每种文字分配颜色
    color = colors[i % len(colors)]
    # 渲染文字表面（添加错误处理）
    try:
        # 确保文本是字符串类型
        if not isinstance(text, str):
            text = str(text)
        text_surface = font.render(text, True, color)
    except Exception as e:
        print(f"渲染失败 '{text}': {e}")
        # 使用简单回退文本
        text_surface = font.render("Love", True, color)
    # 随机初始位置
    idx = random.randint(0, len(love_points) - 1)
    x, y = love_points[idx]
    # 随机速度
    speed_x = random.uniform(-0.15, 0.15)
    speed_y = random.uniform(-0.15, 0.15)
    text_objects.append({
        "surface": text_surface,
        "text": text,  # 保存原始文本用于调试
        "x": x,
        "y": y,
        "speed_x": speed_x,
        "speed_y": speed_y,
        "target_idx": idx,
        "color": color
    })
# 添加标题（设为空字符串以隐藏标题）
try:
    title_text = title_font.render("", True, (255, 255, 255))
except:
    title_text = title_font.render("", True, (255, 255, 255))

# 加载并播放音乐
try:
    pygame.mixer.music.load("yan_ren_zhong_musi.flac")
    pygame.mixer.music.set_volume(0.5)  # 设置音量为50%
    pygame.mixer.music.play(-1)  # -1表示循环播放
    print("音乐播放中...")
except Exception as e:
    print(f"音乐加载失败: {e}")
# 添加说明文字
instruction_font = get_font(16)
instruction_text = instruction_font.render("按ESC键退出", True, (150, 150, 150))
# 主循环
clock = pygame.time.Clock()
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:
                running = False
    # 黑色背景
    screen.fill((0, 0, 0))
    # 不再绘制标题
    # screen.blit(title_text, (width // 2 - title_text.get_width() // 2, 20))
    # 绘制说明文字
    screen.blit(instruction_text, (width - instruction_text.get_width() - 10, height - 30))
    # 绘制和移动文字
    for obj in text_objects:
        # 绘制文字
        text_rect = obj["surface"].get_rect(center=(obj["x"], obj["y"]))
        screen.blit(obj["surface"], text_rect)
        # 移动文字
        target_x, target_y = love_points[obj["target_idx"]]
        obj["x"] += (target_x - obj["x"]) * 0.02 + obj["speed_x"]
        obj["y"] += (target_y - obj["y"]) * 0.02 + obj["speed_y"]
        # 更新目标点
        obj["target_idx"] = (obj["target_idx"] + 1) % len(love_points)
        # 边界检查
        if obj["x"] < 0 or obj["x"] > width:
            obj["speed_x"] *= -1
        if obj["y"] < 50 or obj["y"] > height - 50:
            obj["speed_y"] *= -1
    # 显示帧率
    fps_text = font.render(f"FPS: {int(clock.get_fps())}", True, (100, 100, 100))
    screen.blit(fps_text, (10, height - 30))
    pygame.display.flip()
    clock.tick(60)
pygame.quit()
sys.exit()